# -*- coding:utf-8 -*-

# @Time    : 2023/5/13 02:24
# @Author  : zengwenjia
# @Email   : zengwenjia@lingxi.ai
# @File    : user_info_extract.py
# @Software: LLM_internal

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# from agent.llm_agent import LLMAgent
from bot.insurance_sales.agent.llm_agent import LLMAgent

default_template = """
作为一个专业的{role}，场景是在电话通话中，你需要基于对话记录提取用户信息，更新已知用户信息
只使用'==='之间的对话记录和已知用户信息来做出决策，需要注意以下信息：
1、你需要输出对话记录中所有包含需要识别信息的结果，一步一步确认，一个都不要遗漏，只要是用户有提及，即使用户说没有的，也要输出，即使是0也要输出。但用户未提及的则不要输出，0也不要输出。
2、你识别的信息必须符合基本的常识，比如：用户年龄不会超过100岁，也不可能是0岁；用户的姓氏要在中国百家姓内。
3、需要注意用户说话比较简洁，可能会默认缩写很多信息。请记住今年是2023年，如果用户表示自己是六零年的，那表示用户是1960年出生的，用户年龄为63岁。如果用户表示自己六十了，那用户年龄为60岁。
4、用户同意听你介绍养老社区不能提取到用户是否同意参观；询问是否同意参观时，只要用户不明确拒绝则可以认为用户同意参观；询问用户对年金险是否有兴趣，只要用户不明确拒绝则可以认为无压力。
5、向用户介绍并确认用户需要什么样的房型时，如果用户都可以接受，则默认记录较大的房型。
6、如果用户年龄在65岁以上，默认用户是为自己考虑养老社区的；如果用户年龄小于65岁或等于65岁，需要用户明确告诉你为何人考虑养老社区才可提取。
6、默认退休年龄为60岁。如：用户表示还有5年退休，则用户年龄为55岁。
7、你需要根据用户的城市信息，提取用户的省份。如：用户的城市是衡水，那么用户的省份是河北。
7、你需要更新已知用户信息，就是把新提取到的用户信息增加到已知用户信息里，或者更新已知用户信息里的内容。

需要识别的内容如下：
{{{result_template}}}

已知用户信息：
===
{user_info}
===
对话记录：
===
{conversation_history}
===
已知用户所在城市是{city}，如果用户有提到所在的城市，以用户说的为准。此外，需要你根据全部上下文对话记录，逐项逐步推理出所有需要识别的内容，未提及或未知的不要返回，在确保每项信息都没有遗漏,且是用户明确表示的信息情况下，返回收集到用户确认的信息(而不是泰康的客户经理表述的内容)的json格式是：
"""

class UserInfoExtract(LLMAgent):

    def __init__(self, role, conversation_history, user_info_rule, city, user_info):
        self.role = role
        if not conversation_history:
            conversation_history = []
        self.conversation_history = conversation_history

        self.prompt = default_template.format(role=self.role,
                                              conversation_history=self.conversation_history,
                                              result_template=user_info_rule,
                                              city=city, user_info=user_info)
        super().__init__(self.prompt)


if __name__ == '__main__':
    user_info_list = ['今年年龄', '期望退休年龄', '退休后每个月消费', '性别', '当前月收入', '当前存款', '当前月支出', '收入年度涨幅']
    user_info_extract = UserInfoExtract(role='保险规划师',
                                        conversation_history='我每年收入36万',
                                        # conversation_history='你好',
                                        user_info_rule=user_info_list)
    result = user_info_extract.chat_with_azure()
    print(result)
